★指定ユーザーのみ管理画面の機能を制限
2015年11月11日 / functions.php, WPユーザー権限設定
http://www.nxworld.net/wordpress/wp-current-user-can-and-get-currentuserinfo.html
こちらの説明も良い。2つの方法を紹介することで・・・理解が深まるかも。
上記で使用したcurrent_user_canとget_currentuserinfo
「特定の権限以外のユーザー」 に適用する
if (!current_user_can('administrator')) {
// ここに処理
}
何らかの理由でどうしても他のユーザーも「管理者」として登録する必要が出てきた場合は、current_user_canを使用して権限に条件分岐を行うことはできなくなります。
「特定のID以外のユーザー」 に適用する
global $current_user; get_currentuserinfo(); if ($current_user->ID != "1" ) { // ここに処理 }
ユーザー権限などについての詳細は以下で確認できます。
http://dim5.net/wordpress/role-menu.html
こちらもありのようだ。
1 → SuperAdmin(特権管理者)
2 → 管理者(administrator)
3 → 編集者(editor)
wordpressをマルチサイトで利用している場合には上のようなユーザー権限の順序になっている。
remove_menu_pageでメニューの削除
メニューの削除については、公式ページの情報が参考になる。
remove_menu_page()
function userrole_menus() { $current_user = wp_get_current_user(); if( $current_user->ID == "1" ) // 特権管理者の場合はメニューの削除をしない { } else // 特権管理者以外の場合はダッシュボードと投稿メニューを削除する { remove_menu_page('index.php'); // ダッシュボード remove_menu_page('edit.php'); // 投稿 } //echo "<pre>"; //echo var_dump($current_user); //echo "</pre>"; } add_action('admin_menu', 'userrole_menus');
http://weblog.hy-z.com/skill/1095 こちらがよろしいようで・・・ふむふむgoodだがマルチサイトでは問題有
メニューの一部を非表示にする★これは//15で機能確認したOK
function remove_menus () {
global $menu;
global $current_user;
get_currentuserinfo();
if($current_user -> ID != "1") {
$restricted = array(
__('固定ページ'),
__('コメント'),
__('お問い合わせ'),
__('外観'),
__('プラグイン'),
__('ユーザー'),
__('ツール'),
__('設定')
);
end ($menu);
while (prev($menu)){
$value = explode(' ',$menu[key($menu)][0]);
if(in_array($value[0] != NULL?$value[0]:"" , $restricted)){
unset($menu[key($menu)]);
}
}
remove_submenu_page('index.php','update-core.php'); //更新非表示
remove_submenu_page('edit.php','edit-tags.php?taxonomy=post_tag'); //タグ非表示
remove_submenu_page('edit.php','edit-tags.php?taxonomy=category'); //カテゴリー非表示
remove_menu_page('siteguard'); //SiteGuardプラグイン非表示
}
}
add_action('admin_menu', 'remove_menus');
http://dim5.net/wordpress/wpmu-remove-menu-page.html
add_action('admin_menu', array($this, 'remove_menus'));
add_action('admin_init', array($this, 'remove_menus_mu'));
admin_menuでは、マルチサイトの管理メニューは制御できない。
フックする順番としてはadmin_initのほうが後になるが、上の方法でシングルサイトの管理メニューとマルチサイトのメニューを制御できる。
製作者(ID:1)以外に適用させるので「$current_user->ID != “1”」を使いました。
if($current_user -> ID != “1”)
これにより「ユーザーIDが1じゃなかった場合、処理をしなさい」という事になります。
一部のメニューは「$restricted = array」で指定しても非表示になりません。
その場合は「remove_menu_page」「remove_submenu_page」で非表示にしましょう。
($current_user -> user_login == ‘Nori’)だとNoriには非表示もできなくはないだろう。
function remove_menus(){ global $menu; global $current_user; get_currentuserinfo(); //check first user if($current_user->user_login == 'user1'){ $restricted = array( __('Links'), __('Comments'), __('Appearance'), __('Plugins'), __('Profile'), __('Tools'), __('Settings') ); end ($menu); while (prev($menu)){ $value = explode(' ',$menu[key($menu)][0]); if(in_array($value[0] != NULL?$value[0]:"" , $restricted)){unset($menu[key($menu)]);} } } //check second user if($current_user->user_login == 'user2'){ $restricted = array( __('Links'), __('Comments'), __('Appearance'), __('Plugins') ); end ($menu); while (prev($menu)){ $value = explode(' ',$menu[key($menu)][0]); if(in_array($value[0] != NULL?$value[0]:"" , $restricted)){unset($menu[key($menu)]);} } } } add_action('admin_menu', 'remove_menus');
メニューの名前を変更する
global $current_user; get_currentuserinfo(); if ($current_user->ID != "1" ) { add_filter( 'gettext', 'change_side_text' ); add_filter( 'ngettext', 'change_side_text' ); function change_side_text( $translated ) { $translated = str_ireplace( 'ダッシュボード', '管理画面TOP', $translated ); $translated = str_ireplace( 'ニュース', 'お知らせを書く', $translated ); $translated = str_ireplace( '投稿', 'ブログを書く', $translated ); $translated = str_ireplace( 'メディア', '画像の管理', $translated ); return $translated; }
ここではCSSを利用しています。 表示オプションに指定されている「#screen-options-link-wrap」「#contextual-help-link-wrap」を「Display:none」で非表示にすることが出来ます。
ダッシュボードに製作者からのお知らせを載せる★
global $current_user; get_currentuserinfo(); if ($current_user->ID != "1" ) { add_action('wp_dashboard_setup', 'my_custom_dashboard_widgets'); function my_custom_dashboard_widgets() { global $wp_meta_boxes; wp_add_dashboard_widget('custom_help_widget', 'HYZstudioからのお知らせ', 'dashboard_text'); } function dashboard_text() { echo '<p>ここに文章を書く</p>'; } }